'use strict';
const Controller = require('egg').Controller;

class BaseController extends Controller {
    // 操作成功
    async success(redirectUrl, message) {
        await this.ctx.render('admin/public/success', {
            redirectUrl: redirectUrl,
            message: message || '操作成功'
        });
    }

    // 操作失败
    async error(redirectUrl, message) {
        await this.ctx.render('admin/public/error', {
            redirectUrl: redirectUrl,
            message: message || '操作失败'
        });
    }

    // 验证码
    async verify() {
        let captcha = await this.service.tools.captcha();
        this.ctx.response.type = 'image/svg+xml';    // 指定返回的类型
        this.ctx.body = captcha.data;                // 给页面返回一张图片
    }

    // 公共删除一行方法
    async delete() {
        /*
            1. 获取要删除的数据库表     model
            2. 获取要删除的数据的id     _id
            3. 执行删除
            4. 返回以前的页面
        */
        let model = this.ctx.request.query.model;     // 取到 model名称
        let id = this.ctx.request.query.id;
        
        await this.ctx.model[model].deleteOne({"_id": id});   // 在 model集合(对象)里取出model

        this.ctx.redirect(this.ctx.state.prevPage);   // 返回上一页地址

    }

    // 改变状态的方法
    async changeStatus() {
        let model = this.ctx.request.query.model;  // 数据库表 Model
        let attr = this.ctx.request.query.attr;    // 更新的属性 如: status is_best 
        let id = this.ctx.request.query.id;        // 更新的 id

        let result = await this.ctx.model[model].find({"_id": id});

        if (result.length > 0) {
            if (result[0][attr] == 1) {
                var json = {
                    [attr]: 0
                }
            } else {
                var json = {
                    [attr]: 1
                }
            }
            // 执行更新操作
            let updateResult = await this.ctx.model[model].updateOne({"_id": id}, json);
            if (updateResult) {
                this.ctx.body = {"message": '更新成功', "success": true};
            } else {
                this.ctx.body = {"message": '更新失败', "success": false};
            }
        } else {
            this.ctx.body = {"message": '更新失败，参数错误', "success": false};
        }
    }

    // 改变数值的方法
    async editNum() {
        let model = this.ctx.request.query.model;  // 数据库表 Model
        let attr = this.ctx.request.query.attr;    // 更新的属性 如: status is_best 
        let id = this.ctx.request.query.id;        // 更新的 id
        let num = this.ctx.request.query.num;        // 改变的值

        let result = await this.ctx.model[model].find({"_id": id});

        if (result.length > 0) {
            let json = {
                [attr]: num
            };

            // 执行更新操作
            let updateResult = await this.ctx.model[model].updateOne({"_id": id}, json);
            if (updateResult) {
                this.ctx.body = {"message": '更新成功', "success": true};
            } else {
                this.ctx.body = {"message": '更新失败', "success": false};
            }
        } else {
            this.ctx.body = {"message": '更新失败，参数错误', "success": false};
        }
    }
}

module.exports = BaseController;
